package com.oa.common.tree;


import com.fasterxml.jackson.annotation.JsonIgnore;

import java.util.List;

/**
 * @author cuichao
 * tree节点
 */
public interface TreeNode<T extends TreeNode> {
    /**
     * tree-key
     *
     * @return
     */
    Object getKey();

    /**
     * 节点名称
     *
     * @return
     */
    String getName();

    /**
     * parent-key
     *
     * @return
     */
    Object getParentKey();

    /**
     * 获得父级节点
     *
     * @return
     */
    @JsonIgnore
    T getParent();

    /**
     * 设置父级节点
     */
    void setParent(T t);

    /**
     * 节点类型
     *
     * @return
     */
    String getNodeType();

    /**
     * 是否是叶子节点
     *
     * @return
     */
    boolean hasLeaf();

    /***
     * 得到其子节点
     * @return
     */
    List<T> getChildren();

    /**
     * @return
     */
    void setChildren(List<T> nodes);


}
